//
//  lazyLoadExample.swift
//  SwiftTest
//
//  Created by bym on 2019/8/6.
//  Copyright © 2019 ZZ. All rights reserved.
//

import UIKit

class lazyLoadExample: NSObject {
	override init() {
		lazyMethod()
	}
}

func lazyMethod() {
	let s:student = student()
	ZZLog(s.str)
	ZZLog(s.str1)
	ZZLog(s.str2)
}

//一、直接懒加载赋值
class student: NSObject {
	/**
	1、lazy关键字修饰一个变量就可以实现懒加载
	2、懒加载的本质是,在第一次使用的时候使用调用，只会赋值一次
	3、swift开发中因为方式三书写比较简单，因此经常使用闭包的形式进行懒加载
	*/
	
	//一、直接懒加载赋值
	lazy var str: String = "需要时再调用";
	
	//二、懒加载赋一个函数
	lazy var str1: String = student.test();
	/**
	class func / static func
	
	在方法的func关键字之前加上关键字static或者class都可以用于指定类型((class/struct/enum))的.
	
	不同的是用class关键字指定的类方法可以被子类重写
	
	但是用static关键字指定的类方法是不能被子类重写的
	
	其实在Swift中static func 相当于class final func。禁止这个方法被重写。
	
	*/
	static func test() -> String {
		return "需要时再调用1"
	}
	
	//三、懒加载赋一个闭包
	lazy var str2: String = {
		return "需要时再调用2"
	}()
	
}
